﻿using System.Collections.Generic;
using CTS.Com.Domain.Constants;
using CTS.Com.Domain.Helper;
using CTS.Data.APMenuItems.Domain.Utils;
using CTS.Data.APStorageFiles.Domain.Utils;
using CTS.Data.Domain.Model;
using CTS.Data.MACompanyInfos.Domain.Utils;
using CTS.Data.MAParameters.Domain.Utils;
using CTS.W._150101.Models.Domain.Common.Constants;
using CTS.W._150101.Models.Domain.Dao.Client;
using CTS.W._150101.Models.Domain.Model.Client.Main;

namespace CTS.W._150101.Models.Domain.Logic.Client.Main
{
    /// <summary>
    /// InitLogic
    /// </summary>
    public class InitLogic
    {
        #region Execute Method
        /// <summary>
        /// Xử lý init.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        public InitDataModel Execute(InitDataModel inputObject)
        {
            // Kiểm tra thông tin
            Check(inputObject);
            // Lấy thông tin
            var resultObject = GetInfo(inputObject);
            // Kết quả trả về
            return resultObject;
        }
        #endregion

        #region Private Method
        /// <summary>
        /// Kiểm tra thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        private void Check(InitDataModel inputObject)
        {
        }

        /// <summary>
        /// Lấy thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        private InitDataModel GetInfo(InitDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var getResult = new InitDataModel();
            var parameterCom = new ParameterCom();
            // Map dữ liệu
            DataHelper.CopyObject(inputObject, getResult);
            // Lấy danh sách menu sản phẩm
            var listItemMenus = GetListItemMenus();
            // Lấy danh sách menu top
            var listTopMenus = GetListTopMenus(listItemMenus);
            // Lấy danh sách menu left
            var listLeftMenus = GetListLeftMenus(listItemMenus);
            // Lấy cờ hiện số lượng sản phẩm
            var showBadge = parameterCom.GetString(
                Logics.LOCALE_DEFAULT,
                W150101Logics.CD_PARAM_CD_SHOWBADGE,
                false);
            // Lấy đường dẫn file banner
            var bannerUrl = GetBannerUrl();
            // Gán giá trị trả về
            getResult.ListTopMenus = listTopMenus;
            getResult.ListLeftMenus = listLeftMenus;
            getResult.ShowBadge = showBadge;
            getResult.BannerUrl = bannerUrl;
            // Kết quả trả về
            return getResult;
        }

        /// <summary>
        /// Lấy danh sách menu top
        /// </summary>
        private IList<MenuObject> GetListTopMenus(IList<MenuObject> listItemMenus)
        {
            // Khởi tạo biến cục bộ
            var menuCom = new MenuCom();
            // Lấy danh sách menu
            var listMenus = menuCom.GetListWithArgs(Logics.LOCALE_DEFAULT, W150101Logics.CD_APP_CD_CLN, false);
            // Chuyển đổi kiểu 'IList' thành 'List'
            var listTopMenus = DataHelper.ToList(listMenus);
            // Thêm danh sách menu sản phẩm vào danh sách menu top
            listTopMenus.AddRange(listItemMenus);
            // Kết quả trả về
            return listTopMenus;
        }

        /// <summary>
        /// Lấy danh sách menu left
        /// </summary>
        private IList<MenuObject> GetListLeftMenus(IList<MenuObject> listItemMenus)
        {
            // Kết quả trả về
            return listItemMenus;
        }

        /// <summary>
        /// Lấy danh sách menu sản phẩm
        /// </summary>
        private IList<MenuObject> GetListItemMenus()
        {
            // Khởi tạo biến cục bộ
            var processDao = new MainDao();
            // Lấy danh sách menu sản phẩm
            var listItemMenus = processDao.GetListItemMenus();
            // Kết quả trả về
            return listItemMenus;
        }

        /// <summary>
        /// Lấy đường dẫn file banner
        /// </summary>
        public string GetBannerUrl()
        {
            // Khởi tạo biến cục bộ
            var companyCom = new CompanyCom();
            var storageFileCom = new StorageFileCom();
            // Lấy mã file banner
            var bannerFileCd = companyCom.GetString(
                Logics.LOCALE_DEFAULT,
                W150101Logics.CD_INFO_CD_BANNERFILECD,
                false);
            // Lấy đường dẫn file banner
            var bannerUrl = storageFileCom.GetFileName(
                Logics.LOCALE_DEFAULT,
                bannerFileCd,
                false);
            // Kết quả trả về
            return bannerUrl;
        }
        #endregion
    }
}